﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using AcadPos.Entity;
using AcadPosApp.Utilidades;

namespace AcadPosApp.Cadastros
{
    public partial class CadastroModuloCurriculo : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                carregaAreasConhecimento();
                pnlPesquisa.Attributes.Add("onkeypress", "return clickButton(event,'" + btnConsultar.ClientID + "')");
                pnlCadastro.Attributes.Add("onkeypress", "return clickButton(event,'" + btnConfirmar.ClientID + "')");
                ddlCurriculoPesquisa.Attributes.Add("onkeypress", "return clickButton(event,'" + btnConsultarModulos.ClientID + "')");
            }
        }

        protected void btnConsultar_Click(object sender, EventArgs e)
        {
            carregaGridPesquisa();
            ddlCurriculoPesquisa.Enabled = false;
            ddlCurriculoPesquisa.Items.Clear();
            pnlPesquisaModuloCurriculo.Visible = false;
        }

        private void carregaGridPesquisa()
        {
            gvwPesquisa.Visible = true;
            Curso curso = new Curso();
            curso.Descricao = txtPesquisa.Text;
            curso.IdAreaConhecimento = Convert.ToInt32(ddlAreaConhecimento.SelectedValue);
            gvwPesquisa.DataSource = ControlClass.CNCurso.listarCursos(curso);
            gvwPesquisa.DataBind();
            gvwPesquisa.SelectedIndex = -1;
        }

        private void carregaAreasConhecimento()
        {
            AreaConhecimento area = new AreaConhecimento();
            area.Descricao = string.Empty;
            ddlAreaConhecimento.DataSource = ControlClass.CNAreaConhecimento.listarAreaConhecimento(area);
            ddlAreaConhecimento.DataTextField = "DESCRICAO";
            ddlAreaConhecimento.DataValueField = "ID_AREA_CONHECIMENTO";
            ddlAreaConhecimento.DataBind();
        }

        private void carregaAreasConhecimentoCadastro()
        {
            AreaConhecimento area = new AreaConhecimento();
            area.Descricao = string.Empty;
            ddlCadAreaConhecimento.DataSource = ControlClass.CNAreaConhecimento.listarAreaConhecimento(area);
            ddlCadAreaConhecimento.DataTextField = "DESCRICAO";
            ddlCadAreaConhecimento.DataValueField = "ID_AREA_CONHECIMENTO";
            ddlCadAreaConhecimento.DataBind();
        }

        protected void gvwPesquisa_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            gvwPesquisa.PageIndex = e.NewPageIndex;
            carregaGridPesquisa();
        }

        protected void gvwPesquisa_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            #region Configurando Imagem do Status
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                e.Row.Cells[4].Visible = true;

                Image controle = (Image)e.Row.FindControl("imgStatus");
                DataRow linha = (e.Row.DataItem as DataRow);
                if ((e.Row.Cells[4].Text.Trim()) == "A")
                    controle.ImageUrl = "~/Imagens/ativo.png";
                else
                    controle.ImageUrl = "~/Imagens/inativo.png";
                e.Row.Cells[4].Visible = false;
            }
            if (e.Row.RowType == DataControlRowType.Header)
            {
                e.Row.Cells[4].Visible = false;
            }
            #endregion
        }

        protected void ddlAreaConhecimento_SelectedIndexChanged(object sender, EventArgs e)
        {
            gvwPesquisa.Visible = false;
            ddlCurriculoPesquisa.Enabled = false;
            ddlCurriculoPesquisa.Items.Clear();
            pnlPesquisaModuloCurriculo.Visible = false;
        }

        protected void btnInserir_Click(object sender, EventArgs e)
        {
            if (gvwPesquisa.SelectedIndex > -1 && ddlCurriculoPesquisa.SelectedValue != "")
            {
                btnConfirmar.CommandName = "Inserir";
                pnlCadastro.Visible = true;
                pnlPesquisa.Enabled = false;
                pnlPesquisaModuloCurriculo.Enabled = false;
                carregaAreasConhecimentoCadastro();
                ddlCadAreaConhecimento.SelectedValue = ddlAreaConhecimento.SelectedValue.ToString();
                txtCadDescricao.Text = Server.HtmlDecode(gvwPesquisa.Rows[gvwPesquisa.SelectedIndex].Cells[2].Text.ToString());
                ddlSituacaoCurso.SelectedValue = Server.HtmlDecode(gvwPesquisa.Rows[gvwPesquisa.SelectedIndex].Cells[4].Text.ToString());

                Curriculo curriculo = new Curriculo();
                curriculo.IdCurso = Convert.ToInt32(gvwPesquisa.SelectedValue);
                DataTable dt = ControlClass.CNCurriculo.listaCurriculoPorCurso(curriculo);
                ddlCadCurriculo.DataSource = dt;
                ddlCadCurriculo.DataTextField = "COD_CURRICULO_SITUACAO";
                ddlCadCurriculo.DataValueField = "ID_CURRICULO";
                ddlCadCurriculo.DataBind();
                ddlCadCurriculo.SelectedValue = ddlCurriculoPesquisa.SelectedValue;

                Modulo modulo = new Modulo();
                modulo.Descricao = "";
                ddlCadModulo.DataSource = ControlClass.CNModulo.listarModulos(modulo);
                ddlCadModulo.DataTextField = "DESCRICAO";
                ddlCadModulo.DataValueField = "ID_MODULO";
                ddlCadModulo.DataBind();
            }
            else
            {
                ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.Nada, "Selecione um curso para inserir um currículo e/ou currículo!")), true);
            }
        }

        protected void gvwPesquisa_SelectedIndexChanged(object sender, EventArgs e)
        {
            carregaCurriculosCurso();
            pnlPesquisaModuloCurriculo.Visible = false;
        }

        private void carregaCurriculosCurso()
        {
            ddlCurriculoPesquisa.Enabled = true;
            Curriculo curriculo = new Curriculo();
            curriculo.IdCurso = Convert.ToInt32(gvwPesquisa.SelectedValue);
            DataTable dt = ControlClass.CNCurriculo.listaCurriculoPorCurso(curriculo);
            ddlCurriculoPesquisa.DataSource = dt;
            ddlCurriculoPesquisa.DataTextField = "COD_CURRICULO_SITUACAO";
            ddlCurriculoPesquisa.DataValueField = "ID_CURRICULO";
            ddlCurriculoPesquisa.DataBind();
            if (dt.Rows.Count <= 0)
            {
                ddlCurriculoPesquisa.Enabled = false;
                ddlCurriculoPesquisa.Items.Clear();
            }
        }

        protected void gvwPesquisaModuloCurriculo_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            try
            {
                ModuloCurriculo moduloCurriculo = new ModuloCurriculo();
                int index = int.Parse((String)e.CommandArgument);
                moduloCurriculo.IdModuloCurriculo = Convert.ToInt32(gvwPesquisaModuloCurriculo.DataKeys[index]["ID_MODULO_CURRICULO"].ToString());
                string usuario = User.Identity.Name;
                ddlCadAreaConhecimento.SelectedValue = ddlAreaConhecimento.SelectedValue.ToString();
                txtCadDescricao.Text = Server.HtmlDecode(gvwPesquisa.Rows[gvwPesquisa.SelectedIndex].Cells[2].Text.ToString());
                ddlSituacaoCurso.SelectedValue = Server.HtmlDecode(gvwPesquisa.Rows[gvwPesquisa.SelectedIndex].Cells[4].Text.ToString());

                if (e.CommandName == "Alterar")
                {
                    pnlCadastro.Visible = true;
                    pnlPesquisa.Enabled = false;
                    pnlPesquisaModuloCurriculo.Enabled = false;
                    carregaAreasConhecimentoCadastro();
                    //ddlCadAreaConhecimento.SelectedValue = ddlAreaConhecimento.SelectedValue.ToString();
                    //txtCadDescricao.Text = Server.HtmlDecode(gvwPesquisa.Rows[gvwPesquisa.SelectedIndex].Cells[2].Text.ToString());
                    //ddlSituacaoCurso.SelectedValue = Server.HtmlDecode(gvwPesquisa.Rows[gvwPesquisa.SelectedIndex].Cells[4].Text.ToString());

                    #region CarregaCurriculo
                    Curriculo curriculo = new Curriculo();
                    curriculo.IdCurso = Convert.ToInt32(gvwPesquisa.SelectedValue);
                    DataTable dt = ControlClass.CNCurriculo.listaCurriculoPorCurso(curriculo);
                    ddlCadCurriculo.DataSource = dt;
                    ddlCadCurriculo.DataTextField = "COD_CURRICULO_SITUACAO";
                    ddlCadCurriculo.DataValueField = "ID_CURRICULO";
                    ddlCadCurriculo.DataBind();
                    ddlCadCurriculo.SelectedValue = ddlCurriculoPesquisa.SelectedValue;
                    #endregion

                    #region CarregaModulo
                    Modulo modulo = new Modulo();
                    modulo.Descricao = "";
                    ddlCadModulo.DataSource = ControlClass.CNModulo.listarModulos(modulo);
                    ddlCadModulo.DataTextField = "DESCRICAO";
                    ddlCadModulo.DataValueField = "ID_MODULO";
                    ddlCadModulo.DataBind();
                    #endregion

                    ddlCadModulo.SelectedValue = gvwPesquisaModuloCurriculo.DataKeys[index]["ID_MODULO"].ToString();
                    ddlSituacaoModulo.SelectedValue = Server.HtmlDecode(gvwPesquisaModuloCurriculo.Rows[index].Cells[5].Text.ToString());

                    ViewState["ID_MODULO_CURRICULO"] = moduloCurriculo.IdModuloCurriculo.ToString();

                    txtOrdem.Text = gvwPesquisaModuloCurriculo.Rows[index].Cells[2].Text.ToString();
                    btnConfirmar.CommandName = "Alterar";
                }
                else if (e.CommandName == "Excluir")
                {
                    pnlCadastro.Visible = false;
                    moduloCurriculo.IdCurriculo = Convert.ToInt32(ddlCadCurriculo.SelectedValue);
                    moduloCurriculo.IdModulo = Convert.ToInt32(ddlCadModulo.SelectedValue);
                    moduloCurriculo.Situacao = ddlSituacaoModulo.SelectedValue;

                    if (ControlClass.CNModuloCurriculo.excluir(moduloCurriculo, usuario))
                    {
                        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.SucessoExcluir, "")), true);
                        pnlCadastro.Visible = false;
                        pnlPesquisa.Enabled = true;
                        carregaModulosCurriculo();
                    }
                    else
                    {                        
                        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.Nada, "Não foi possível realizar a operação. Por favor, tente novamente.")), true);
                    }
                }
            }
            catch (Exception ex)
            {
                if(ex.Message.Contains("FK_TB_MATRIZ_CURRICULAR_TB_DISCIPLINA"))
                    ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.Nada, "Não é possível excluir um módulo que possua disciplinas!")), true);
                else
                    ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.Erro, "")), true);
                pnlCadastro.Visible = false;
                pnlPesquisa.Enabled = true;
            }
        }

        protected void gvwPesquisaModuloCurriculo_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                foreach (DataControlFieldCell cell in e.Row.Cells)
                {
                    // Verificando todas as colunas da linha
                    foreach (Control control in cell.Controls)
                    {
                        //No caso o botão é do tipo Imagem Button
                        ImageButton button = control as ImageButton;
                        if (button != null && button.CommandName == "Excluir")
                        {
                            // Adicionando a mensagem javascript
                            button.OnClientClick = "return ShowConfirm('Tem certeza que deseja excluir?', '" + button.ClientID + "');";
                        }
                    }
                }
            }
            #region Configurando Imagem do Status
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                e.Row.Cells[4].Visible = true;

                Image controle = (Image)e.Row.FindControl("imgStatus");
                DataRow linha = (e.Row.DataItem as DataRow);
                if ((e.Row.Cells[4].Text.Trim()) == "A")
                    controle.ImageUrl = "~/Imagens/ativo.png";
                else
                    controle.ImageUrl = "~/Imagens/inativo.png";
                e.Row.Cells[4].Visible = false;
            }
            if (e.Row.RowType == DataControlRowType.Header)
            {
                e.Row.Cells[4].Visible = false;
            }
            #endregion
        }

        protected void gvwPesquisaModuloCurriculo_RowCreated(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                ImageButton l = (ImageButton)e.Row.FindControl("EXCLUIR");
                l.CommandArgument = e.Row.RowIndex.ToString();

                ImageButton button2 = (ImageButton)e.Row.FindControl("ImgAlterar");
                button2.CommandArgument = e.Row.RowIndex.ToString();
            }
        }

        protected void gvwPesquisaModuloCurriculo_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            gvwPesquisaModuloCurriculo.PageIndex = e.NewPageIndex;
            carregaModulosCurriculo();
        }

        protected void btnConsultarModulos_Click(object sender, EventArgs e)
        {
            carregaModulosCurriculo();
        }

        private void carregaModulosCurriculo()
        {
            if (gvwPesquisa.SelectedIndex > -1 && ddlCurriculoPesquisa.SelectedValue != "")
            {
                pnlPesquisaModuloCurriculo.Visible = true;
                ModuloCurriculo moduloCurriculo = new ModuloCurriculo();
                moduloCurriculo.IdCurriculo = Convert.ToInt32(ddlCurriculoPesquisa.SelectedValue);
                gvwPesquisaModuloCurriculo.DataSource = ControlClass.CNModuloCurriculo.listaModulosCurriculo(moduloCurriculo);
                gvwPesquisaModuloCurriculo.DataBind();
            }
            else
            {
                ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.Nada, "Selecione um curso para inserir um currículo e/ou curso!")), true);
            }
        }

        protected void btnConfirmar_Click(object sender, EventArgs e)
        {
            try
            {
                string usuario = User.Identity.Name;
                ModuloCurriculo moduloCurriculo = new ModuloCurriculo();
                moduloCurriculo.IdCurriculo = Convert.ToInt32(ddlCadCurriculo.SelectedValue);
                moduloCurriculo.IdModulo = Convert.ToInt32(ddlCadModulo.SelectedValue);
                moduloCurriculo.Situacao = ddlSituacaoModulo.SelectedValue;
                moduloCurriculo.Ordem = Convert.ToInt32(txtOrdem.Text);

                if (btnConfirmar.CommandName == "Inserir")
                {
                    if (ControlClass.CNModuloCurriculo.inserir(moduloCurriculo, usuario))
                    {
                        finalizaOperacao();
                        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.SucessoInserir, "")), true);
                        carregaModulosCurriculo();
                        pnlPesquisaModuloCurriculo.Enabled = true;
                    }
                }

                else if (btnConfirmar.CommandName == "Alterar")
                {
                    moduloCurriculo.IdModuloCurriculo = Convert.ToInt32(ViewState["ID_MODULO_CURRICULO"].ToString());
                    if (ControlClass.CNModuloCurriculo.alterar(moduloCurriculo, usuario))
                    {
                        finalizaOperacao();
                        pnlPesquisa.Enabled = true;
                        carregaModulosCurriculo();
                        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.SucessoAlterar, "")), true);
                        pnlPesquisaModuloCurriculo.Enabled = true;
                    }
                }
            }
            catch (Exception ex)
            {
                if(ex.Message.Contains("IX_TB_MODULO_CURRICULO"))
                    ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.Nada, "Esse módulo já foi inserido para esse currículo!")), true);
                else
                    ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.Erro, ex.Message.ToString())), true);
            }
        }

        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            TrustX.Util.UtilForm.LimparCampos(pnlCadastro);
            pnlCadastro.Visible = false;
            pnlPesquisa.Enabled = true;
            pnlPesquisaModuloCurriculo.Enabled = true;
        }

        private void finalizaOperacao()
        {
            TrustX.Util.UtilForm.LimparCampos(pnlCadastro);
            pnlCadastro.Visible = false;
            pnlPesquisa.Enabled = true;
        }

        protected void ddlCurriculoPesquisa_SelectedIndexChanged(object sender, EventArgs e)
        {
            pnlPesquisaModuloCurriculo.Visible = false;
        }
    }
}